home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 5 / MACVOGL- / VOGL.H < prev    next >
Text File  |  1992-07-19  |  12KB  |  603 lines

  1. #ifdef PC    /* Stupid pox head crap */
  2. char    *vallocate();
  3. char    *malloc();
  4. #endif
  5.  
  6. /*
  7.  * VOGL is always defined if a header file is from the 
  8.  * VOGL library. In cases where you do use some VOGL
  9.  * initialisation routines like vinit, just put #ifdef VOGL...
  10.  * around.
  11.  */
  12. #ifndef VOGL
  13. #define    VOGL
  14. #endif
  15.  
  16. #ifndef TRUE
  17. #define    TRUE    1
  18. #endif
  19.  
  20. #ifndef FALSE
  21. #define    FALSE    0
  22. #endif
  23.  
  24. /*
  25.  * Misc defines...
  26.  */
  27. #define    FLAT    0
  28. #define SMOOTH    1
  29. #define GD_XPMAX 1
  30. #define GD_YPMAX 2
  31.  
  32. /*
  33.  * standard colour indices
  34.  */
  35. #define    BLACK        0
  36. #define    RED        1
  37. #define    GREEN        2
  38. #define    YELLOW        3
  39. #define    BLUE        4
  40. #define    MAGENTA        5
  41. #define    CYAN        6
  42. #define    WHITE        7
  43.  
  44. /*
  45.  * when (if ever) we need the precision
  46.  */
  47. #ifdef DOUBLE
  48. #define    double    double
  49. #endif
  50.  
  51. /*
  52.  * How to convert degrees to radians
  53.  */
  54. #define    PI    3.14159265358979
  55. #define D2R    (PI / 180.0)
  56.  
  57. /*
  58.  * miscellaneous typedefs and type defines
  59.  */
  60. typedef double    Vector[4];
  61. typedef double    Matrix[4][4];
  62. typedef double    Tensor[4][4][4];
  63. typedef short    Angle;
  64. typedef double    Coord;
  65. typedef long    Icoord;
  66. typedef short    Scoord;
  67. typedef long    Object;
  68. typedef short    Screencoord;
  69. /*typedef long    Boolean;*/
  70.  
  71. typedef unsigned short    Device;
  72.  
  73. typedef unsigned short    Colorindex;
  74.  
  75.  
  76. /*
  77.  * when register variables get us into trouble
  78.  */
  79. #ifdef NOREGISTER
  80. #define    register
  81. #endif
  82.  
  83. /*
  84.  * max number of vertices in a ploygon
  85.  */
  86. #define    MAXVERTS    128
  87.  
  88. /*
  89.  * object definitions
  90.  */
  91. #define MAXENTS        101        /* size of object table */
  92. #define    MAXTOKS        100        /* num. of tokens alloced at once in
  93.                        an object  */
  94.  
  95. /*
  96.  * Polygon fill modes for "polymode"
  97.  */
  98. #define PYM_POINT    0
  99. #define PYM_LINE    0
  100. #define PYM_FILL    1
  101. #define PYM_HOLLOW    1
  102.  
  103. /*
  104.  * functions which can appear in objects
  105.  */
  106. #define    ARC        1
  107. #define    CALLOBJ        3
  108. #define    CIRCLE        5
  109. #define    CLEAR        6
  110. #define    COLOR        7
  111. #define    DRAW        8
  112. #define    DRAWSTR        10
  113. #define    FONT        12
  114. #define    LOADMATRIX    15
  115. #define    MAPCOLOR    16
  116. #define    MOVE        17
  117. #define    MULTMATRIX    18
  118. #define    POLY        19
  119. #define    POPATTRIBUTES    22
  120. #define    POPMATRIX    23
  121. #define    POPVIEWPORT    24
  122. #define    PUSHATTRIBUTES    25
  123. #define    PUSHMATRIX    26
  124. #define    PUSHVIEWPORT    27
  125. #define    RCURVE        28
  126. #define    RPATCH        29
  127. #define    SECTOR        30
  128. #define    VIEWPORT    33
  129. #define    BACKBUFFER    34
  130. #define    FRONTBUFFER    35
  131. #define    SWAPBUFFERS    36
  132. #define    BACKFACING    37
  133. #define    TRANSLATE    38
  134. #define    ROTATE        39
  135. #define    SCALE        40
  136.  
  137. #define    ARCF        41
  138. #define    CIRCF        42
  139. #define    POLYF        43
  140. #define    RECTF        44
  141.  
  142. #define    CMOV        45
  143.  
  144. /*
  145.  * States for bgn* and end* calls
  146.  */
  147. #define    NONE        0    /* Just set current spot */
  148. #define    VPNT        1    /* Draw dots         */
  149. #define    VLINE        2    /* Draw lines         */
  150. #define    VCLINE        3    /* Draw closed lines     */
  151. #define    VPOLY        4    /* Draw a polygon      */
  152.  
  153. /*
  154.  * data types for object tokens
  155.  */
  156. typedef union tk {
  157.     int        i;
  158.     double        f;
  159. } Token;
  160.  
  161. typedef struct tls {
  162.     int        count;
  163.     Token        *toks;
  164.     struct tls    *next;
  165. } TokList;
  166.  
  167. /*
  168.  * double buffering modes.
  169.  */
  170. #define    SINGLE        1
  171.  
  172. /*
  173.  * attributes
  174.  */
  175. typedef struct {
  176.     char    backface,
  177.         mode;            /* Which mode are we in */
  178.     int     color;
  179.     double   fontheight;
  180.     double   fontwidth;
  181.     int    fontnum;
  182. } Attribute;
  183.  
  184. /*
  185.  * viewport
  186.  */
  187. typedef struct vp {
  188.     double    left;
  189.     double    right;
  190.     double    bottom;
  191.     double    top;
  192. } Viewport; 
  193.  
  194. /*
  195.  * stacks
  196.  */
  197. typedef    struct    ms {    /* Matrix stack entries    */
  198.     Matrix        m;
  199.     struct    ms    *back;
  200. } Mstack;
  201.  
  202. typedef    struct    as {    /* Attribute stack entries */
  203.     Attribute    a;
  204.     struct    as    *back;
  205. } Astack;
  206.  
  207. typedef    struct    vs {    /* Viewport stack entries */
  208.     Viewport    v;
  209.     struct    vs    *back;
  210. } Vstack;
  211.  
  212. /*
  213.  * vogle device structures
  214.  */
  215. typedef struct dev {
  216.     char    *devname;        /* name of device */
  217.     char    *large,            /* name of large font */
  218.         *small;            /* name of small font */
  219.     int    (*Vbackb)(),        /* Set drawing in back buffer */
  220.         (*Vchar)(),        /* Draw a hardware character */
  221.         (*Vcheckkey)(),        /* Ckeck if a key was hit */
  222.         (*Vclear)(),        /* Clear the screen to current color */
  223.         (*Vcolor)(),        /* Set current color */
  224.         (*Vdraw)(),        /* Draw a line */
  225.         (*Vexit)(),        /* Exit graphics */
  226.         (*Vfill)(),        /* Fill a polygon */
  227.         (*Vfont)(),        /* Set hardware font */
  228.         (*Vfrontb)(),        /* Set drawing in front buffer */
  229.         (*Vgetkey)(),        /* Wait for and get the next key hit */
  230.         (*Vinit)(),        /* Initialise the device */
  231.         (*Vlocator)(),        /* Get mouse/cross hair position */
  232.         (*Vmapcolor)(),        /* Set color indicies */
  233.         (*Vstring)(),        /* Draw a hardware string */
  234.         (*Vswapb)();        /* Swap front and back buffers */
  235. } DevEntry;
  236.  
  237. typedef struct vdev {
  238.     char        initialised,
  239.             clipoff,
  240.             inobject,
  241.             inpolygon,
  242.             fill,            /* polygon filling */
  243.             cpVvalid,        /* is the current device position valid */
  244.             inbackbuffer,        /* are we in the backbuffer */
  245.             clipplanes;        /* active clipping planes */
  246.     void        (*pmove)(),        /* Polygon moves */
  247.             (*pdraw)();        /* Polygon draws */
  248.     TokList        *tokens;        /* ptr to list of tokens for current object */
  249.     Mstack        *transmat;        /* top of transformation stack */
  250.     Astack        *attr;            /* top of attribute stack */
  251.     Vstack        *viewport;        /* top of viewport stack */
  252.     double        hheight, hwidth;    /* hardware character height, width */
  253.     Vector        cpW,            /* current postion in world coords */
  254.             cpWtrans,        /* current world coords transformed */
  255.             upvector;        /* world up */
  256.     int        depth,            /* # bit planes on screen */
  257.             maxVx, minVx,
  258.             maxVy, minVy,
  259.             sizeX, sizeY,         /* size of square on screen */
  260.             sizeSx, sizeSy,        /* side in x, side in y (# pixels) */
  261.             cpVx, cpVy;
  262.     DevEntry    dev;
  263.     double        savex,            /* Where we started for v*() */
  264.             savey,
  265.             savez;
  266.     char        bgnmode;        /* What to do with v*() calls */
  267.     char        save;            /* Do we save 1st v*() point */
  268.  
  269.     char        *wintitle;        /* window title */
  270.  
  271.     char        *devname;        /* pointer to device name */
  272.  
  273.     Matrix        tbasis, ubasis, *bases; /* Patch stuff */
  274.     
  275.     char        *enabled;        /* pointer to enabled devices mask */
  276.     int        maxfontnum;
  277.  
  278.     char        alreadyread;        /* queue device stuff */
  279.     char        kbdmode;        /* are we in keyboard mode */
  280.     char        mouseevents;        /* are mouse events enabled */
  281.     char        kbdevents;        /* are kbd events enabled */
  282.     int        devno, data;
  283.  
  284.     int        concave;        /* concave polygons? */
  285.  
  286. } VDevice;
  287.  
  288. extern VDevice    vdevice;        /* device structure */
  289.  
  290. #define    V_X    0            /* x axis in cpW */
  291. #define    V_Y    1            /* y axis in cpW */
  292. #define    V_Z    2            /* z axis in cpW */
  293. #define    V_W    3            /* w axis in cpW */
  294.  
  295. /*
  296.  * function definitions
  297.  */
  298.  
  299. /*
  300.  * arc routines
  301.  */
  302. extern void    arcprecision();
  303. extern void    circleprecision();
  304. extern void    arc();
  305. extern void    arcs();
  306. extern void    arci();
  307. extern void    arcf();
  308. extern void    arcfs();
  309. extern void    arcfi();
  310. extern void    circ();
  311. extern void    circs();
  312. extern void    circi();
  313. extern void    circf();
  314. extern void    circfs();
  315. extern void    circfi();
  316.  
  317. /*
  318.  * attr routines
  319.  */
  320. extern void    popattributes();
  321. extern void    pushattributes();
  322.  
  323. /*
  324.  * curve routines
  325.  */
  326. extern void    curvebasis();
  327. extern void    curveprecision();
  328. extern void    rcrv();
  329. extern void    crv();
  330. extern void    crvn();
  331. extern void    rcrvn();
  332. extern void    curveit();
  333.  
  334. /*
  335.  * draw routines
  336.  */
  337. extern void    draw();
  338. extern void    draws();
  339. extern void    drawi();
  340. extern void    draw2();
  341. extern void    draw2s();
  342. extern void    draw2i();
  343. extern void    rdr();
  344. extern void    rdrs();
  345. extern void    rdri();
  346. extern void    rdr2();
  347. extern void    rdr2s();
  348. extern void    rdr2i();
  349. extern void    bgnline();
  350. extern void    endline();
  351. extern void    bgnclosedline();
  352. extern void    endclosedline();
  353.  
  354. /*
  355.  * device routines
  356.  */
  357. extern void    qdevice();
  358. extern void    unqdevice();
  359. extern long    qread();
  360. extern void    qreset();
  361. extern long    qtest();
  362. extern Boolean    isqueued();
  363.  
  364. extern void    gexit();
  365. extern void    gconfig();
  366. extern void    shademodel();
  367. extern long    getgdesc();
  368. extern long    winopen();
  369. extern void    ginit();
  370. extern void    gconfig();
  371. extern long    getvaluator();
  372. extern Boolean    getbutton();
  373. extern void    clear();
  374. extern void    colorf();
  375. extern void    color();
  376. extern void    mapcolor();
  377. extern long    getplanes();
  378.  
  379. extern void    vinit();
  380. extern void    voutput();
  381. extern void    verror();
  382. extern void    vnewdev();
  383. extern char    *vgetdev();
  384.  
  385. /*
  386.  * mapping routines
  387.  */
  388. extern int    WtoVx();
  389. extern int    WtoVy();
  390. extern void    VtoWxy();
  391. extern void    CalcW2Vcoeffs();
  392.  
  393. /*
  394.  * general matrix and vector routines
  395.  */
  396. extern void    mult4x4();
  397. extern void    copymatrix();
  398. extern void    identmatrix();
  399. extern void    copytranspose();
  400.  
  401. extern void    multvector();
  402. extern void    copyvector();
  403. extern void    premultvector();
  404.  
  405. /*
  406.  * matrix stack routines
  407.  */
  408. extern void    getmatrix();
  409. extern void    popmatrix();
  410. extern void    loadmatrix();
  411. extern void    pushmatrix();
  412. extern void    multmatrix();
  413.  
  414. /*
  415.  * move routines
  416.  */
  417. extern void    move();
  418. extern void    moves();
  419. extern void    movei();
  420. extern void    move2();
  421. extern void    move2s();
  422. extern void    move2i();
  423. extern void    rmv();
  424. extern void    rmvs();
  425. extern void    rmvi();
  426. extern void    rmv2();
  427. extern void    rmv2s();
  428. extern void    rmv2i();
  429.  
  430. /*
  431.  * object routines
  432.  */
  433. extern Boolean    isobj();
  434. extern long    genobj();
  435. extern void    delobj();
  436. extern void    makeobj();
  437. extern void    callobj();
  438. extern void    closeobj();
  439. extern long    getopenobj();
  440. extern Token    *newtokens();
  441.  
  442. /*
  443.  * patch routines.
  444.  */
  445. extern void    defbasis();
  446. extern void    patchbasis();
  447. extern void    patchcurves();
  448. extern void    patchprecision();
  449. extern void    patch();
  450. extern void    rpatch();
  451.  
  452. /*
  453.  * point routines
  454.  */
  455. extern void    pnt();
  456. extern void    pnts();
  457. extern void    pnti();
  458. extern void    pnt2();
  459. extern void    pnt2s();
  460. extern void    pnt2i();
  461. extern void    bgnpoint();
  462. extern void    endpoint();
  463.  
  464. /*
  465.  * v routines
  466.  */
  467. extern void    v4f();
  468. extern void    v3f();
  469. extern void    v2f();
  470. extern void    v4d();
  471. extern void    v3d();
  472. extern void    v2d();
  473. extern void    v4i();
  474. extern void    v3i();
  475. extern void    v2i();
  476. extern void    v4s();
  477. extern void    v3s();
  478. extern void    v2s();
  479.  
  480. /*
  481.  * polygon routines.
  482.  */
  483. extern void    concave();
  484. extern void    backface();
  485. extern void    frontface();
  486. extern void    polymode();
  487. extern void    poly2();
  488. extern void    poly2i();
  489. extern void    poly2s();
  490. extern void    polyi();
  491. extern void    polys();
  492. extern void    polf2();
  493. extern void    polf2i();
  494. extern void    polf2s();
  495. extern void    polfi();
  496. extern void    polfs();
  497. extern void    poly();
  498. extern void    polf();
  499. extern void    pmv();
  500. extern void    pmvi();
  501. extern void    pmv2i();
  502. extern void    pmvs();
  503. extern void    pmv2s();
  504. extern void    pmv2();
  505. extern void    pdr();
  506. extern void    rpdr();
  507. extern void    rpdr2();
  508. extern void    rpdri();
  509. extern void    rpdr2i();
  510. extern void    rpdrs();
  511. extern void    rpdr2s();
  512. extern void    rpmv();
  513. extern void    rpmv2();
  514. extern void    rpmvi();
  515. extern void    rpmv2i();
  516. extern void    rpmvs();
  517. extern void    rpmv2s();
  518. extern void    pdri();
  519. extern void    pdr2i();
  520. extern void    pdrs();
  521. extern void    pdr2s();
  522. extern void    pdr2();
  523. extern void    pclos();
  524. extern void    bgnpolygon();
  525. extern void    endpolygon();
  526.  
  527. /*
  528.  * rectangle routines
  529.  */
  530. extern void    rect();
  531. extern void    recti();
  532. extern void    rects();
  533. extern void    rectf();
  534. extern void    rectfi();
  535. extern void    rectfs();
  536.  
  537. /*
  538.  * tensor routines
  539.  */
  540. extern void multtensor();
  541. extern void copytensor();
  542. extern void premulttensor();
  543. extern void copytensortrans();
  544.  
  545. /*
  546.  * text routines
  547.  */
  548. extern void    font();
  549. extern void    charstr();
  550. extern void    cmov();
  551. extern void    cmov2();
  552. extern void    cmovi();
  553. extern void    cmovs();
  554. extern void    cmov2i();
  555. extern void    cmov2s();
  556. extern long    getwidth();
  557. extern long    getheight();
  558.  
  559. /*
  560.  * transformation routines
  561.  */
  562. extern void    scale();
  563. extern void    translate();
  564. extern void    rotate();
  565. extern void    rot();
  566.  
  567. /*
  568.  * window definition routines
  569.  */
  570. extern void    ortho();
  571. extern void    ortho2();
  572. extern void    lookat();
  573. extern void    window();
  574. extern void    polarview();
  575. extern void    perspective();
  576.  
  577. /*
  578.  * routines for manipulating the viewport
  579.  */
  580. extern void    viewport();
  581. extern void    popviewport();
  582. extern void    pushviewport();
  583.  
  584. /*
  585.  * routines for retrieving the graphics position
  586.  */
  587. extern void    getgp();
  588. extern void    getgpos();
  589.  
  590. /*
  591.  * routines for handling the buffering
  592.  */
  593. extern void    backbuffer();
  594. extern void    frontbuffer();
  595. extern void    swapbuffers();
  596. extern void    doublebuffer();
  597.  
  598. /*
  599.  * routines for window sizing and positioning
  600.  */
  601. extern void    prefsize();
  602. extern void    prefposition();
  603.